home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / pdselect / awnp / awnp-docs / demos / xo.rx < prev    next >
Text File  |  2000-02-16  |  4KB  |  147 lines

  1. /* X and O Board Demo of AWNPipe: gui image handling.
  2. This script demonstrates how to define, use, and replace button images.
  3. The image file is only loaded once when the first button is created.
  4. The other buttons reuse the previous BUTTON bitmap since no file name is
  5. given. Image definitions use image buffer 0 since this is where the
  6. rootbitmap for buttons is stored. */
  7.  
  8.  
  9. /* define the gui*/
  10. call setup()
  11. do while 1 /* forever*/
  12.  
  13.   /* reset board logic*/
  14.   winner=0
  15.   do i=2 for 11
  16.     key.i=0
  17.   end
  18.  
  19.   /*open the gui*/
  20.   call open(ca,'awnpipe:/xc')
  21.   call writeln(ca,gui'open')
  22.   /*Main  loop finishes with a leave command*/
  23.   /*i counts the number of moves made.*/
  24.    i=0
  25.   do  while 1
  26.     /* start event stream */
  27.     call writeln(ca,'con')
  28.  
  29.     /* read an event and parse it*/
  30.     in=readln(ca)
  31.     parse value in with in1 in2 in3
  32.  
  33.     /* quit if windw is closed*/
  34.     if in1='close' then exit
  35.  
  36.     /* handle gadget hits*/
  37.     if in1='gadget' then do
  38.  
  39.       /*restart gadget...leave the main loop (back to forever loop)*/
  40.       if in2=13 then leave
  41.  
  42.       /* rest are board buttons ignore if we have a winner*/
  43.       else if winner=0 then do
  44.         call make(in2)
  45.  
  46.         /*no need to check for a winner before 5 moves*/
  47.         if i>4 then call checkwin()
  48.  
  49.         /* have we used all the spaces and not got a winner ?*/
  50.         if ((i>8)&(winner=0)) then do
  51.  
  52.           /* set windw title and add restart button*/
  53.           winner=3
  54.           call writeln(ca,'id 0 s 8 gt "Nobody Wins!"')
  55.           writeln(ca,'define Button gt "Restart Game"')
  56.           writeln(ca,'ref')
  57.         end
  58.       end
  59.     end
  60.   end
  61.  
  62.   /*close the gui , then loop back for new game */
  63.   call close(ca)
  64. end
  65. exit/* we should never get to here...*/
  66.  
  67.  
  68. make:
  69. i=i+1
  70. /* make an x or o image and set board logic*/
  71. if bittst(i,0) then call makex(arg(1))
  72. else call makeo(arg(1))
  73.  
  74. /* set the image in the proper button and disable button*/
  75. call writeln(ca,'id 'arg(1)' ni 0 ro 1')
  76. return(0)
  77.  
  78. makex:
  79. /* make an image and set board logic*/
  80. call writeln(ca,'define bitmap  trans anim 0|0|70|51|0|0|0 ' )
  81. key.in2=1
  82. return(0)
  83.  
  84. makeo:
  85. /* make an image and set board logic*/
  86. call writeln(ca,'define bitmap  trans anim 74|0|70|51|0|0|0 ' )
  87. key.in2=10
  88. return(0)
  89.  
  90. checkwin:
  91. if key.7~=0 then do
  92.   if ((key.7= key.6 & key.7=key.8) |(key.7= key.3 & key.7=key.11 ) | (key.7= key.2 & key.7=key.12 ) | (key.7= key.4 & key.7=key.10))  then call win(7)
  93. end
  94. if key.2~=0 then do
  95.   if ((key.2= key.3 & key.2=key.4) | (key.2= key.6 & key.2=key.10)) then call win(2)
  96. end
  97. if key.12~=0 then do
  98.   if ((key.12= key.11 & key.12=key.10) | (key.12= key.4 & key.12=key.8)) then call win(12)
  99. end
  100. return
  101.  
  102. win:
  103. parse arg winner
  104.  
  105. /*set windw title to show winner*/
  106. if key.winner=1 then call writeln(ca,'id 0 s 8 gt "X Wins!"')
  107. else call writeln(ca,'id 0 s 8 gt "O Wins!"')
  108.  
  109. return(1)
  110.  
  111. setup:
  112. /*  layouts have a Gadget ID so the buttons are
  113. 2 | 3| 4
  114. --------
  115. 6 | 7| 8
  116. --------
  117. 10|11|12
  118. restart is 13 when added*/
  119.  
  120. /* easy layout control*/
  121. le='le'||'0a'x
  122. lo='layout b 0'||'0a'x
  123.  
  124. /* windw definition sets quiet flag since we know what our GIDs will be*/
  125. /* modify is turned on so we can modify the GUI*/
  126. gui='"  X and O Demo" cg dg db v m q fw fh'||'0a'x
  127.  
  128.  
  129. /* first button loads an image (reused by all other graphics)*/
  130. gui=gui||lo||'button b 0 trans fn "xo.gif"  anim 150|0|70|51|0|0|0'||'0a'x
  131.  
  132. /*a blank button, verticle, and horizontal line*/
  133. blank='button b 0 trans anim 150|0|70|51|0|0|0'||'0a'x
  134. vertline='bitmap   part 71|0|3|51|0|0|0'||'0a'x||'image'||'0a'x
  135. horzline='bitmap   part 0|52|216|3|0|0|0'||'0a'x||'image'||'0a'x
  136.  
  137. /*build the rest of the board*/
  138. gui=gui||vertline||blank||vertline||blank||le||horzline
  139. gui=gui||lo||blank||vertline||blank||vertline||blank||le||horzline
  140. gui=gui||lo||blank||vertline||blank||vertline||blank||le
  141. gui=gui||'define Button gt "Restart Game"'||le
  142. return
  143.  
  144.  
  145.  
  146.  
  147.